SlideShare a Scribd company logo
1 of 12
Download to read offline
OpenIDにおける
RP/OP間アソシエーション調査

  KaiGai Kohei <kaigai@ak.jp.nec.com>
OpenIDプロトコル概要
RP→OPアソシエーション要求

 OP Endpoint URLに対して、以下の要求を行う
  OP Endpoint URL は、ユーザからの入力、もしくはディスカバリの実行により
  取得する事ができる。
 要求パラメータ(必須)
  openid.ns = "http://specs.openid.net/auth/2.0"
  openid.mode = "associate"
  openid.assoc_type = ("HMAC-SHA1"|"HMAC-SHA256")
  openid.session_type=("DH-SHA1"|"DH-SHA256"|"no-encryption")
 Diffie-Hellman要求パラメータ
  openid.dh_modules=base64(btwoc(p))               公開鍵
  openid.dh_gen=base64(btwoc(g))
  openid.dh_consumer_public=base64(btwoc(g^xa mod p))
  DH鍵共有方式については、RFC2631参照
  http://www.ipa.go.jp/security/rfc/RFC2631JA.html
Diffie-Hellman 鍵共有法(DH 法)

Diffie と Hellman は、「共有された秘密(shared secret)」が盗聴者によって入手で
きない方法で、2者が秘密を共有するための方法を記述している。この秘密は、他の
(共通鍵)アルゴリズムのための暗号技術的な鍵とする材料に変換することができる。

  Shared secret (ZZ) の生成
  ZZ = g ^ (xb * xa) mod p
  ZZ = (yb ^ xa) mod p = (ya ^ xb) mod p
     ya は、主体 a の公開鍵; ya = g ^ xa mod p
     yb は、主体 b の公開鍵; yb = g ^ xb mod p
     xa は、主体 a の私有鍵
     xb は、主体 b の私有鍵
     pとqは、大きな素数
  g = h^{(p-1)/q} mod p
     hは、h{(p-1)/q} mod p > 1を満たす、1 < h < p-1内の任意の整数。
     (gは、位数 q mod pをもつ。すなわち、g^q mod p = 1 if g != 1)
  ZZを元に、MAC鍵(共有の秘密鍵)を生成する事ができる。
HMAC:メッセージ認証のための鍵付ハッシング

この文書では、暗号ハッシュ関数を使用してメッセージ認証を行なう仕組みである
HMAC について記述する。HMAC は、MD5 や SHA-1 などの反復暗号ハッシュ関
数を秘密の共有鍵と組み合わせて使用する。HMAC の暗号としての強度は、使用
しているハッシュ関数のプロパティに依存する。

 HMACの定義
 データ 'text' に対して HMAC を計算するには、以下のようにする
 H(K XOR opad || H(K XOR ipad, text))
    H()は、一方向ハッシュ関数 e.g) md5, sha1, sha256, ...
    Kは、秘密の共有鍵
    opad は、バイト値 0x5C を 64 回繰り返した文字列
    padは、バイト値 0x36 を 64 回繰り返した文字列
 RFC2104
   http://www.ipa.go.jp/security/rfc/RFC2104JA.html
OP→RPアソシエーション応答

 RP→OPアソシエーション要求に対し、
 RPは以下のパラメータを返却する
 共通の応答パラメータ
  ns=http://specs.openid.net/auth/2.0
  assoc_handle=255字以下のASCII文字列
  session_type=要求のopenid.session_typeの値
  assoc_type=要求のopenid.accoc_typeの値
  expires_in=このアソシエーションの有効期限(単位: 秒)
 暗号化されない応答パラメータ
  mac_key=base64(MAC鍵; セッションの共有秘密鍵)
                                              OPの共有鍵
 Diffie-Hellman応答パラメータ
  dh_server_public=base64(btwoc(g ^ xb mod p))      共有の秘密 (=ZZ)
  enc_mac_key=base64(H(btwoc(g ^ (xa * xb) mod p)) XOR MAC鍵)
     ハッシュ関数H()は、"SHA1" か "SHA256" のどちらか
UA→OP認証要求

 RPはリダイレクト(302)を用いて、
 UA⇔OPで認証を行うよう要求する。
 要求パラメータ
  openid.ns = "http://specs.openid.net/auth/2.0"
  openid.mode = ("checkid_immediate"|"checkid_setup")
  openid.claimed_id=主張識別子
  openid.identity=OPローカル識別子
  openid.assoc_handle=アソシエーションハンドル
  openid.return_to=認証後に戻るべきURL
  openid.realm=認証を求めるURL
UA⇔OP間認証プロセス

具体的な認証の方法については、OpenIDでは未定義
OP→RP 肯定アサーション

 OPはUAとの認証の結果を、リダイレクトを用いてRPに伝達する
 肯定アサーションは以下のパラメータを含む
  openid.ns = "http://specs.openid.net/auth/2.0"
  openid.mode="id_res"
  openid.op_endpoint=OP Endpoint URL
  openid.claimed_id=主張識別子
  openid.identity=OPローカル識別子
  openid.return_to=要求された戻り先URL
  openid.response_nonce=認証応答に固有の255字以下のASCII文字列
  openid.accoc_handle=アソシエーションハンドル
  openid.signed=署名済みフィールドのリスト
  openid.sig=base64(HMAC署名)
 否定アサーションはエラー情報を含む(省略)
RP: アサーションの検証

 RPが肯定アサーションを受け入れる際には、
 以下の値を検証しなければならない
  openid.return_to" が現在の要求の URL と一致する
  ディスカバリによって得られた情報がアサーションの情報と一致する
  "openid.response_nonce" について、当該 OP から、これまでに同じ値の
  アサーションを受け入れたことがない
    リプレイ攻撃を防ぐため
  アサーションの署名が有効で、必要な全てのフィールドに署名がされている
    少なくとも、"op_endpoint"、"return_to"、"response_nonce"、"assoc_handle"を
    含み、存在する場合は"claimed_id"と"identity"を含むこと
 署名の検証について
  assoc_handle に紐付けられたMAC鍵は、OP→RPに伝達済みである
  enc_mac_key=base64(H(btwoc(g ^ (xa * xb) mod p)) XOR MAC鍵)
     enc_mac_key を ZZ = (yb ^ xa) mod p で XOR すればよい。

                            dh_server_public
Diffie-Hellman 鍵共有ライブラリ

  openssl-devel パッケージ
        Diffie-Hellman 鍵共有を行うためのライブラリ関数が準備されているようだ。
        (詳細未確認)

dh(3)                                 OpenSSL                       dh(3)

NAME
        dh - Diffie-Hellman key agreement

SYNOPSIS
        #include <openssl/dh.h>
        #include <openssl/engine.h>

         DH *   DH_new(void);
         void   DH_free(DH *dh);

         int    DH_size(const DH *dh);

         DH *   DH_generate_parameters(int prime_len, int generator,
                        void (*callback)(int, int, void *), void *cb_arg);
         :                :
おしまい

More Related Content

What's hot

ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
Shinichi Awamoto
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
do_aki
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
 
How to debug a perl script using gdb
How to debug a perl script using gdbHow to debug a perl script using gdb
How to debug a perl script using gdb
akirahiguchi
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
JPCERT Coordination Center
 

What's hot (20)

CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
SSHパケットの復号ツールを作ろう_v1(Decrypt SSH .pcap File)
 
ELFの動的リンク
ELFの動的リンクELFの動的リンク
ELFの動的リンク
 
CMSとPerlで遊ぼう
CMSとPerlで遊ぼうCMSとPerlで遊ぼう
CMSとPerlで遊ぼう
 
2017年夏のPerl
2017年夏のPerl2017年夏のPerl
2017年夏のPerl
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
 
ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)ラボユース最終成果報告会(Web公開版)
ラボユース最終成果報告会(Web公開版)
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何かsignal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
 
Webサーバ勉強会_#1_108-114:ログとか
Webサーバ勉強会_#1_108-114:ログとかWebサーバ勉強会_#1_108-114:ログとか
Webサーバ勉強会_#1_108-114:ログとか
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたはりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
Functional Way
Functional WayFunctional Way
Functional Way
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
How to debug a perl script using gdb
How to debug a perl script using gdbHow to debug a perl script using gdb
How to debug a perl script using gdb
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
 
Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義Javaセキュアコーディングセミナー東京第3回講義
Javaセキュアコーディングセミナー東京第3回講義
 

Similar to OSS開発勉強会-10

Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
akirahiguchi
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
Takeru INOUE
 

Similar to OSS開発勉強会-10 (20)

OSS開発勉強会
OSS開発勉強会OSS開発勉強会
OSS開発勉強会
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
SPDYの話
SPDYの話SPDYの話
SPDYの話
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
スクリプト言語PHP攻略法
スクリプト言語PHP攻略法スクリプト言語PHP攻略法
スクリプト言語PHP攻略法
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
PHPの今とこれから2017
PHPの今とこれから2017PHPの今とこれから2017
PHPの今とこれから2017
 
Node.js入門
Node.js入門Node.js入門
Node.js入門
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
OpenShift v3 Technical Overview
OpenShift v3 Technical OverviewOpenShift v3 Technical Overview
OpenShift v3 Technical Overview
 
Functions
FunctionsFunctions
Functions
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 

More from Kohei KaiGai

More from Kohei KaiGai (20)

20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History20221116_DBTS_PGStrom_History
20221116_DBTS_PGStrom_History
 
20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API20221111_JPUG_CustomScan_API
20221111_JPUG_CustomScan_API
 
20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow20211112_jpugcon_gpu_and_arrow
20211112_jpugcon_gpu_and_arrow
 
20210928_pgunconf_hll_count
20210928_pgunconf_hll_count20210928_pgunconf_hll_count
20210928_pgunconf_hll_count
 
20210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.020210731_OSC_Kyoto_PGStrom3.0
20210731_OSC_Kyoto_PGStrom3.0
 
20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache20210511_PGStrom_GpuCache
20210511_PGStrom_GpuCache
 
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index20210301_PGconf_Online_GPU_PostGIS_GiST_Index
20210301_PGconf_Online_GPU_PostGIS_GiST_Index
 
20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS20201128_OSC_Fukuoka_Online_GPUPostGIS
20201128_OSC_Fukuoka_Online_GPUPostGIS
 
20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGIS20201113_PGconf_Japan_GPU_PostGIS
20201113_PGconf_Japan_GPU_PostGIS
 
20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing20201006_PGconf_Online_Large_Data_Processing
20201006_PGconf_Online_Large_Data_Processing
 
20200828_OSCKyoto_Online
20200828_OSCKyoto_Online20200828_OSCKyoto_Online
20200828_OSCKyoto_Online
 
20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw20200806_PGStrom_PostGIS_GstoreFdw
20200806_PGStrom_PostGIS_GstoreFdw
 
20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw20200424_Writable_Arrow_Fdw
20200424_Writable_Arrow_Fdw
 
20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo20191211_Apache_Arrow_Meetup_Tokyo
20191211_Apache_Arrow_Meetup_Tokyo
 
20191115-PGconf.Japan
20191115-PGconf.Japan20191115-PGconf.Japan
20191115-PGconf.Japan
 
20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta20190926_Try_RHEL8_NVMEoF_Beta
20190926_Try_RHEL8_NVMEoF_Beta
 
20190925_DBTS_PGStrom
20190925_DBTS_PGStrom20190925_DBTS_PGStrom
20190925_DBTS_PGStrom
 
20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai20190909_PGconf.ASIA_KaiGai
20190909_PGconf.ASIA_KaiGai
 
20190516_DLC10_PGStrom
20190516_DLC10_PGStrom20190516_DLC10_PGStrom
20190516_DLC10_PGStrom
 
20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw20190418_PGStrom_on_ArrowFdw
20190418_PGStrom_on_ArrowFdw
 

Recently uploaded

Recently uploaded (10)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

OSS開発勉強会-10

  • 3. RP→OPアソシエーション要求 OP Endpoint URLに対して、以下の要求を行う OP Endpoint URL は、ユーザからの入力、もしくはディスカバリの実行により 取得する事ができる。 要求パラメータ(必須) openid.ns = "http://specs.openid.net/auth/2.0" openid.mode = "associate" openid.assoc_type = ("HMAC-SHA1"|"HMAC-SHA256") openid.session_type=("DH-SHA1"|"DH-SHA256"|"no-encryption") Diffie-Hellman要求パラメータ openid.dh_modules=base64(btwoc(p)) 公開鍵 openid.dh_gen=base64(btwoc(g)) openid.dh_consumer_public=base64(btwoc(g^xa mod p)) DH鍵共有方式については、RFC2631参照 http://www.ipa.go.jp/security/rfc/RFC2631JA.html
  • 4. Diffie-Hellman 鍵共有法(DH 法) Diffie と Hellman は、「共有された秘密(shared secret)」が盗聴者によって入手で きない方法で、2者が秘密を共有するための方法を記述している。この秘密は、他の (共通鍵)アルゴリズムのための暗号技術的な鍵とする材料に変換することができる。 Shared secret (ZZ) の生成 ZZ = g ^ (xb * xa) mod p ZZ = (yb ^ xa) mod p = (ya ^ xb) mod p ya は、主体 a の公開鍵; ya = g ^ xa mod p yb は、主体 b の公開鍵; yb = g ^ xb mod p xa は、主体 a の私有鍵 xb は、主体 b の私有鍵 pとqは、大きな素数 g = h^{(p-1)/q} mod p hは、h{(p-1)/q} mod p > 1を満たす、1 < h < p-1内の任意の整数。 (gは、位数 q mod pをもつ。すなわち、g^q mod p = 1 if g != 1) ZZを元に、MAC鍵(共有の秘密鍵)を生成する事ができる。
  • 5. HMAC:メッセージ認証のための鍵付ハッシング この文書では、暗号ハッシュ関数を使用してメッセージ認証を行なう仕組みである HMAC について記述する。HMAC は、MD5 や SHA-1 などの反復暗号ハッシュ関 数を秘密の共有鍵と組み合わせて使用する。HMAC の暗号としての強度は、使用 しているハッシュ関数のプロパティに依存する。 HMACの定義 データ 'text' に対して HMAC を計算するには、以下のようにする H(K XOR opad || H(K XOR ipad, text)) H()は、一方向ハッシュ関数 e.g) md5, sha1, sha256, ... Kは、秘密の共有鍵 opad は、バイト値 0x5C を 64 回繰り返した文字列 padは、バイト値 0x36 を 64 回繰り返した文字列 RFC2104 http://www.ipa.go.jp/security/rfc/RFC2104JA.html
  • 6. OP→RPアソシエーション応答 RP→OPアソシエーション要求に対し、 RPは以下のパラメータを返却する 共通の応答パラメータ ns=http://specs.openid.net/auth/2.0 assoc_handle=255字以下のASCII文字列 session_type=要求のopenid.session_typeの値 assoc_type=要求のopenid.accoc_typeの値 expires_in=このアソシエーションの有効期限(単位: 秒) 暗号化されない応答パラメータ mac_key=base64(MAC鍵; セッションの共有秘密鍵) OPの共有鍵 Diffie-Hellman応答パラメータ dh_server_public=base64(btwoc(g ^ xb mod p)) 共有の秘密 (=ZZ) enc_mac_key=base64(H(btwoc(g ^ (xa * xb) mod p)) XOR MAC鍵) ハッシュ関数H()は、"SHA1" か "SHA256" のどちらか
  • 7. UA→OP認証要求 RPはリダイレクト(302)を用いて、 UA⇔OPで認証を行うよう要求する。 要求パラメータ openid.ns = "http://specs.openid.net/auth/2.0" openid.mode = ("checkid_immediate"|"checkid_setup") openid.claimed_id=主張識別子 openid.identity=OPローカル識別子 openid.assoc_handle=アソシエーションハンドル openid.return_to=認証後に戻るべきURL openid.realm=認証を求めるURL
  • 9. OP→RP 肯定アサーション OPはUAとの認証の結果を、リダイレクトを用いてRPに伝達する 肯定アサーションは以下のパラメータを含む openid.ns = "http://specs.openid.net/auth/2.0" openid.mode="id_res" openid.op_endpoint=OP Endpoint URL openid.claimed_id=主張識別子 openid.identity=OPローカル識別子 openid.return_to=要求された戻り先URL openid.response_nonce=認証応答に固有の255字以下のASCII文字列 openid.accoc_handle=アソシエーションハンドル openid.signed=署名済みフィールドのリスト openid.sig=base64(HMAC署名) 否定アサーションはエラー情報を含む(省略)
  • 10. RP: アサーションの検証 RPが肯定アサーションを受け入れる際には、 以下の値を検証しなければならない openid.return_to" が現在の要求の URL と一致する ディスカバリによって得られた情報がアサーションの情報と一致する "openid.response_nonce" について、当該 OP から、これまでに同じ値の アサーションを受け入れたことがない リプレイ攻撃を防ぐため アサーションの署名が有効で、必要な全てのフィールドに署名がされている 少なくとも、"op_endpoint"、"return_to"、"response_nonce"、"assoc_handle"を 含み、存在する場合は"claimed_id"と"identity"を含むこと 署名の検証について assoc_handle に紐付けられたMAC鍵は、OP→RPに伝達済みである enc_mac_key=base64(H(btwoc(g ^ (xa * xb) mod p)) XOR MAC鍵) enc_mac_key を ZZ = (yb ^ xa) mod p で XOR すればよい。 dh_server_public
  • 11. Diffie-Hellman 鍵共有ライブラリ openssl-devel パッケージ Diffie-Hellman 鍵共有を行うためのライブラリ関数が準備されているようだ。 (詳細未確認) dh(3) OpenSSL dh(3) NAME dh - Diffie-Hellman key agreement SYNOPSIS #include <openssl/dh.h> #include <openssl/engine.h> DH * DH_new(void); void DH_free(DH *dh); int DH_size(const DH *dh); DH * DH_generate_parameters(int prime_len, int generator, void (*callback)(int, int, void *), void *cb_arg); : :